package cn.suchan.jianzhi.q43_string;

/**
 * 知识点：左旋转字符串
 * 题目描述
 * 汇编语言中有一种移位指令叫做循环左移（ROL），
 * 现在有个简单的任务，就是用字符串模拟这个指令的运算结果。
 * 对于一个给定的字符序列S，请你把其循环左移K位后的序列输出。
 * 例如，字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果，即“XYZdefabc”。
 *
 * @author suchan
 * @date 2019/06/06
 */
public class Solution {

    public String LeftRotateString(String str, int n) {
        if (str.isEmpty() || str == null) {
            return "";
        }

        // 这段代码可以写成这样
        int shift = n % str.length();
        /*int length = str.length();
        // 移位的位数
        int shift = n;
        if (n >= length) {
            shift = n - length;
        }*/

        // 获取从下标0到shift（不包含shift）的子字符串
        String perStr = str.substring(0, shift);
        // 获取后shift位的子字符串
        String afStr = str.substring(shift);

        String result = afStr + perStr;
        return result;
    }

    public static void main(String[] args) {
        String str = "abcdefg";
        Solution solution = new Solution();
        String result = solution.LeftRotateString(str, 3);
        System.out.println(result);
    }
}
